<?php
namespace Wap\Controller;
class CARDSDK 
{
	private $appId;
	private $appSecret;

	public function __construct($appId, $appSecret) {
	  $this->appId = $appId;
	  $this->appSecret = $appSecret;
	}


	//获取配置包
	/*将 api_ticket、app_id、location_id、times_tamp、nonce_str、card_id、card_type的value值进行字符串的字典序排序。
将所有参数字符串拼接成一个字符串进行sha1加密，得到cardSign。

返回
				shopId: '', // 门店Id
			    cardType: '', // 卡券类型
			    cardId: '', // 卡券Id
			    
			    timestamp: 0, // 卡券签名时间戳
			    nonceStr: '', // 卡券签名随机串
			    signType: '', // 签名方式，默认'SHA1'
			    cardSign: '', // 卡券签名


*/
	function getSignPackage()
	{

		$nonceStr = $this->createNonceStr();
		$timestamp = time();
		
		$data[] = $this->getApiTicket();
		$data[] = $this->appid;

		sort($data, SORT_STRING );
		$cardSign = sha1(implode($data));


		$return = array(
				'shopId' => '', // 门店Id
			    'cardType'=> '', // 卡券类型
			    'cardId'=> '', // 卡券Id
			    
			    'timestamp'=> $timestamp, // 卡券签名时间戳
			    'nonceStr'=> $nonceStr, // 卡券签名随机串
			    'signType'=> 'SHA1', // 签名方式，默认'SHA1'
			    'cardSign'=> $cardSign, // 卡券签名
			);



		return $return;
	}

	//获取api_ticket
	function getApiTicket()
	{
	    // api_ticket 应该全局存储与更新，以下代码以写入到文件中做示例
	    $data = json_decode(file_get_contents("api_ticket.json"));
	    if ($data->expire_time < time()) {
	      $accessToken = $this->getAccessToken();
	      // 如果是企业号用以下 URL 获取 ticket
	      // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
	      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$accessToken}&type=wx_card";
	      $res = json_decode($this->httpGet($url));
	      $ticket = $res->ticket;
	      if ($ticket) {
	        $data->expire_time = time() + 7000;
	        $data->api_ticket = $ticket;
	        $fp = fopen("api_ticket.json", "w");
	        fwrite($fp, json_encode($data));
	        fclose($fp);
	      }
	    } else {
	      $ticket = $data->api_ticket;
	    }

    	return $ticket;
    }

    private function getAccessToken() {
      // access_token 应该全局存储与更新，以下代码以写入到文件中做示例
      $data = json_decode(file_get_contents("access_token.json"));
      if ($data->expire_time < time()) {
        // 如果是企业号用以下URL获取access_token
        // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
        $res = json_decode($this->httpGet($url));
        $access_token = $res->access_token;
        if ($access_token) {
          $data->expire_time = time() + 7000;
          $data->access_token = $access_token;
          $fp = fopen("access_token.json", "w");
          fwrite($fp, json_encode($data));
          fclose($fp);
        }
      } else {
        $access_token = $data->access_token;
      }
      return $access_token;
    }

	  private function httpGet($url) {
	    $curl = curl_init();
	    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	    curl_setopt($curl, CURLOPT_TIMEOUT, 500);
	    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	    curl_setopt($curl, CURLOPT_URL, $url);

	    $res = curl_exec($curl);
	    curl_close($curl);

	    return $res;
	  }

  private function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
  }


}